package com.xuxu.routing;


import com.rabbitmq.client.BuiltinExchangeType;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.xuxu.util.RabbitConnectionUtil;

/**
 * 路由模式 生产者
 * 路由模式相当于在 订阅者模式下增加了一个routingKey(路由key)，发送的消息在交换机中包含这个routingKey，接收消息的队列中也有routingKey
 * 只有这两个routingKey一致，才可以收到这个消息
 *
 * 步骤：
 *  第一步：获取连接对象
 *  第二步：获取频道对象
 *  第三步：声明交换机
 *  第四步：发送消息
 *  第五步：关闭资源
 */
public class Producer {
    //定义交换机名称
    static final String DIRECT_EXCHANGE = "direct_exchange";

    //在订阅者模式、路由模式、通配符模式下，生产者和队列没有直接关系，所以不用在这里声明队列，只用声明交换机就行了

    public static void main(String[] args) throws Exception {
        //获取连接对象
        Connection connection = RabbitConnectionUtil.getConnection();
        //获取频道对象
        Channel channel = connection.createChannel();
        //声明交换机
        /*
            参数一：交换机名称
            参数二：声明是路由模式
         */
        channel.exchangeDeclare(DIRECT_EXCHANGE, BuiltinExchangeType.DIRECT);


        //准备要发送的信息,routingKey(路由Key)是insert
        String message = "新增商品了。路由模式，路由key(routingKey)是 insert";
        //发送消息
        /*
            参数一：交换机名称
            参数二：路由key(routingKey)
            参数三：其他属性
            参数四：发送的消息内容
         */
        channel.basicPublish(DIRECT_EXCHANGE,"insert",null,message.getBytes());
        System.out.println("消息内容是"+message);


        //准备要发送的信息,routingKey(路由Key)是update
        message = "更新商品了。路由模式，路由key(routingKey)是 update";
        //发送消息
        /*
            参数一：交换机名称
            参数二：路由key(routingKey)
            参数三：其他属性
            参数四：发送的消息内容
         */
        channel.basicPublish(DIRECT_EXCHANGE,"update",null,message.getBytes());
        System.out.println("消息内容是"+message);

        //准备要发送的信息,routingKey(路由Key)是delete
        message = "删除商品了。路由模式，路由key(routingKey)是 delete";
        //发送消息
        /*
            参数一：交换机名称
            参数二：路由key(routingKey)
            参数三：其他属性
            参数四：发送的消息内容
         */
        channel.basicPublish(DIRECT_EXCHANGE,"delete",null,message.getBytes());
        System.out.println("消息内容是"+message);


        //关闭资源
        channel.close();
        connection.close();

    }
}
